package com.taobao.tql.scan;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import com.taobao.tql.bean.ApiObjectBean;
import com.taobao.tql.common.TqlConstants;
import com.taobao.tql.parser.JsonParse;

/**
 * 单例
*
* @类名称：GetApiImpl
* @类描述：
* @创建人：卫缺
* @修改人：卫缺
* @修改时间：2011-5-5 下午04:04:59
* @修改备注：
* @version 1.0.0
*
 */
public class GetApiImpl {

	private static GetApiImpl singleSinstance = new GetApiImpl();
	private static Map<String, String> apiClassNameMap = new HashMap<String, String>();
	private static Map<String, String> tableMap = new TreeMap<String, String>();
	private static StringBuilder tableList = new StringBuilder();
	private static Map<String, ApiObjectBean> apiMap = new TreeMap<String, ApiObjectBean>();
	
	public static GetApiImpl getInstantce () {
		return singleSinstance;
	}
	
	private GetApiImpl () {
		
	}
	
	/**
	 * 
	 * @return
	 */
 	public Map<String, String> geTaobaoApi() {
		if(apiClassNameMap.size() <= 0) {
			apiClassNameMap = new HashMap<String, String>();
			Set<Class<?>> apiClasses = ScanGet.getClasses("com.taobao.api.request.");
			for(Class<?> tempCls : apiClasses) {
				String className = tempCls.getName().substring(tempCls.getName().lastIndexOf(".") + 1, tempCls.getName().length());
				apiClassNameMap.put(className.toLowerCase(), tempCls.getName());
			}
		}
		return apiClassNameMap;
	}
 	
 	
 	public Map<String, String> getApiLists() {
 		if(tableMap.size() <= 0) {
 			tableMap.put("user", "1");
 			tableMap.put("product", "2");
 			tableMap.put("products", "2");
 			tableMap.put("itemcats", "3");
			tableMap.put("itemprops", "3");
			tableMap.put("item", "4");
			tableMap.put("trade", "5");
			tableMap.put("pingjia", "6");
			tableMap.put("areas", "7");
			showAllApis();
 		}
 		return tableMap;
 	}
 	
	/**
	 * 
	 * showAllApis(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @return
	 * String
	 * @since 1.0.0
	 */
	public String showAllApis() {
		//List<ApiObjectBean> apiList = new ArrayList<ApiObjectBean>();
		if(tableList.toString().length() <= 0) {
			for(String tempUid : TqlConstants.tempList) {
				Map<String, ApiObjectBean> tempMap = JsonParse.getAllApis(tempUid);
				apiMap.putAll(tempMap);
				for (Map.Entry<String, ApiObjectBean> entry : tempMap.entrySet()) {    
					//apiList.add(entry.getValue());
					tableList.append("<table>");
					tableList.append(entry.getValue().getApiName());
					tableMap.put(entry.getValue().getApiName(), entry.getValue().getApiId());
					tableList.append("</table>\n");
				}
				
			}
		}
		return tableList.toString();
		
	}
	
	/**
	 * 
	 * getApiKey(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param strId
	 * @return
	 * String
	 * @since 1.0.0
	 */
	public String getApiKey(String strId) {
		if(tableMap.size() <= 0) {
			getApiLists();
		}
		return tableMap.get(strId);
	}
	
	/**
	 * 
	 * getApiMaps(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param strId
	 * @return
	 * String
	 * @since 1.0.0
	 */
	public  Map<String, ApiObjectBean> getApiMaps() {
		if(apiMap.size() <= 0) {
			getApiLists();
		}
		return apiMap;
	}
	
}
